<?php
/*
==================================================
TextCMS -- simple plain/text CMS with GPL licence
HTML Templates editor module
(c) 2008-2010, 4X_Pro
Visit us online: http://textcms.ru
==================================================
*/

/** Выводит список стилей и список файлов для выбранного стиля **/
function styles_list() {
  $styles=array();
  $dh = opendir('template');
  while ($curitem=readdir($dh)) if (strpos($curitem,'.')!==0 && is_dir('template/'.$curitem)) $styles[$curitem]=$curitem;
  closedir($dh);
  
  cms_module_load('cmsmain',true);

  $page = cms_output_load_template('list.htm', 'styles');

  if (!isset($_REQUEST['style'])) $data['style']=$GLOBALS['config']['template'];
  else $data['style']=$_REQUEST['style'];
  $params['style']=$styles;

  if (cms_valid_file($data['style'])) {
    $files = _styles_recurse($data['style']);
    array_unshift($files,array('filename'=>$data['style'], 'type'=>0));
    $itemfile = cms_output_load_template('itemfile.htm','styles');
    $itemdir = cms_output_load_template('itemdir.htm','styles');
    $data['ITEMS']='';

//    usort($files,create_function('$a,$b','return $a["type"]==$b["type"] ? strcmp($a["filename"],$b["filename"]) : $a["type"]-$b["type"];'));

    for ($i=0, $count=count($files); $i<$count; $i++) {
      $files[$i]['style']=$data['style'];
      if ($files[$i]['type']==1) $data['ITEMS'].=cmsmain_replace($itemfile,$files[$i]);
      else $data['ITEMS'].=cmsmain_replace($itemdir,$files[$i]);
    }
  }
  else $data['ITEMS']='<div class="errmsg">Некорректное имя стиля!</div>';

  $page=cmsmain_replace($page,$data);
  $page=cmsmain_html_set($page,$data,$params);  
  
  return $page;
}

/** Рекурсивное составление списка файлов в стилевом каталоге и его подкаталогах **/
function _styles_recurse($dir) {
  $files=array();
  $dh = opendir('template/'.$dir);
  while ($curitem=readdir($dh)) {
    if (strpos($curitem,'.')!==0) {
      if (is_dir('template/'.$dir.'/'.$curitem)) {
        $files[]=array('filename'=>$dir.'/'.$curitem,'type'=>0);
        $files=array_merge($files,_styles_recurse($dir.'/'.$curitem));
      }
      else $files[]=array('filename'=>$dir.'/'.$curitem,'type'=>1);
    }
  }
  closedir($dh);
  return $files;
}

/** Редактирование стилевого файла **/
function styles_edit() {
  if (isset($_POST['return'])) {
    $GLOBALS['status']=302;
    $GLOBALS['location']='admin.php?a=styles_list&style='.$_REQUEST['style'];
    return;
  }

  $filename=$_REQUEST['filename'];

  if (cms_valid_file($filename)) {
    $filename='template/'.$filename;
    if (is_writable($filename)) {
      if (isset($_POST['save']) || isset($_POST['save_continue'])) { // если сохраняем страницу
        $fh=fopen($filename,'w');
        if (!$fh) $page='<div class="errmsg">Ошибка сохранения данных в файл!</div>';
        else {
          fputs($fh,$_POST['filedata']);
          $GLOBALS['status']=302;
          if (isset($_POST['save_continue'])) $GLOBALS['location']='admin.php?a=styles_edit&style='.$_REQUEST['style'].'&filename='.$_REQUEST['filename'];
          else $GLOBALS['location']='admin.php?a=styles_list&style='.$_REQUEST['style'].'&ok=1';
        }
        fclose($fh);
      }
      else {
        $page = cms_output_load_template('edit.htm', 'styles');

        $data=$_REQUEST;
        $fh=fopen($filename,'r');
        if (!$fh) $page='<div class="errmsg">Ошибка сохранения данных в файл!</div>';
        $data['filedata']=htmlspecialchars(join('',file($filename)));
        $data['filedata']=str_replace('##','&#35;&#35;',$data['filedata']); // корректировка последовательностей ##, чтобы они не обрабатывались парсером
        fclose($fh);

        cms_module_load('cmsmain',true);
        $page = cmsmain_replace($page,$data);
      }
    }
    else $page='<div class="errmsg">Файл недоступен для записи!</div>';
  }
  else $page='<div class="errmsg">Некорректное имя стиля!</div>';

  return $page;
}

/** Создание нового файла в уже существующем стиле **/
function styles_newfile() {
  $page='';
  if (!isset($_REQUEST['style']) || !$_REQUEST['style']) $page.='<div class="errmsg">Не указано имя стиля!</div>';
  elseif (!isset($_REQUEST['filename']) || !$_REQUEST['filename']) $page.='<div class="errmsg">Не указано имя файла, который требуется создать!</div>';
  else {
    $filename = $_REQUEST['style'].'/'.$_REQUEST['filename'];
    if (!cms_valid_file($filename)) {
      $page.='<div class="errmsg">Имя создаваемого файла содержит недопустимые символы!</div>';
    }

    $filename = 'template/'.$filename;
    $dirname = dirname($filename);
    if (!is_writable($dirname)) $page.='<div class="errmsg">Каталог template/'.$dirname.' не доступен для записи!</div>';
    elseif (file_exists($filename)) $page.='<div class="errmsg">Файл '.$filename.' уже существует!</div>';
    else {
      $GLOBALS['status']=302;
      if (isset($_REQUEST['create_dir']) && $_REQUEST['create_dir']) {
        if (mkdir($filename)) $page = '<div class="okmsg">Каталог '.$filename.'создан!</div>';
        else $page.='<div class="errmsg">Не удалось создать подкаталог template/'.$dirname.'!</div>';
        $GLOBALS['location']='admin.php?a=styles_list&style='.$_REQUEST['style'];
      }
      else {
        $fh=fopen($filename,'w');
        fclose($fh);
        $page = '<div class="okmsg">Файл '.$filename.' создан!</div>';
        $GLOBALS['location']='admin.php?a=styles_edit&style='.$_REQUEST['style'].'&filename='.$_REQUEST['style'].'/'.$_REQUEST['filename'];
      }
    }
  }
  return $page;
}

/** Создание нового стиля **/
function styles_newstyle() {
  $page='';
  if (!isset($_REQUEST['style']) || !$_REQUEST['style']) $page.='<div class="errmsg">Не указано имя стиля!</div>';
  else {
     $filename = $_REQUEST['style'];
     if (!cms_valid_file($filename)) {
       $page.='<div class="errmsg">Имя создаваемого стиля содержит недопустимые символы!</div>';
     }

     $filename = 'template/'.$filename;
     if (!is_writable('template')) $page.='<div class="errmsg">Каталог template не доступен для записи!</div>';
     elseif (file_exists($filename)) $page.='<div class="errmsg">Стиль '.$filename.' уже существует!</div>';
     else {
       if (mkdir($filename)) {
         copy('template/default/template.htm',$filename.'/template.htm');
         if (file_exists('template/default/style.css')) copy('template/default/style.css',$filename.'/style.css');;
         $page = '<div class="okmsg">Стиль '.$filename.'создан!</div>';
       }
       $GLOBALS['status']=302;
       $GLOBALS['location']='admin.php?a=styles_list&style='.$_REQUEST['style'];
     }
  }
  return $page;
}

?>